#ifndef __WIOTA_FLASHING_H__
#define __WIOTA_FLASHING_H__

// AP模组（UCM202）下标，可自定义（配合修改slave初始化）
#define AP_CHIP_INDEX (0)
// 同步助手模组（UCM200）下标，可自定义（配合修改slave初始化）
#define SYNC_ASSISTANT_CHIP_INDEX (1)

// UC8088 flash id
#define UC8088_FLASH_ID (0x0B14)
// UC8288 flash id
#define UC8288_FLASH_ID (0x0B12)

// 烧写UC8088全擦除的flash大小2M
#define UC8088_ERASE_SIZE (2 * 1024 * 1024)
// UC8088静态数据大小
#define UC8288_STATIC_DATA_SIZE (4 * 1024)
// 烧写UC8288全擦除的flash大小504K，静态数据不擦除
#define UC8288_ERASE_SIZE (512 * 1024 - UC8288_STATIC_DATA_SIZE * 2)
// UC8288静态数据地址
#define COMMON_DATA_ADDR (0x7E000)
#define BACKUP_DATA_ADDR (0x7F000)

// 单次擦除、读写的flash大小
#define FLASHING_SECTOR_SIZE (4096)

#define GW_MAX_NEIGHBOR_NUM 10

typedef struct
{
    // id
    unsigned short dev_id;
    // symlen
    unsigned char symbol_len;
    // 上下行比
    unsigned char ratio;
    // 频点
    unsigned char freq;
    // 预留
    unsigned char na;
    // 此设备中心节点信息
    unsigned short center_id;
} neighbor_info_t;

typedef struct
{
    // 固定头信息.固定值为 0xfefd
    unsigned short head;
    // 同步助手200t 模组ID
    unsigned short my_id;
    // 版本号. eg v1.1.1
    unsigned char soft_version[8];
    // 当前系统中心节点ID
    unsigned short center_id;
    // 预留
    unsigned char na;
    // 邻区信息个数. 最大10个。对应宏 GW_MAX_NEIGHBOR_NUM
    unsigned char neighbor_num;
    // 邻区信息
    neighbor_info_t neighbor_info[GW_MAX_NEIGHBOR_NUM];
} sync_dynamics_info_t;

/**
 * @brief 刷机接口，主控通过SPI烧录AP和同步助手镜像
 *
 */
int wiota_flashing(void);

/**
 * @brief  获取同步助手动态信息
 *
 * @return 同步助手动态信息结构体指针
 *
 */
sync_dynamics_info_t *wiota_get_sync_dynamics_info(void);

#endif /* __WIOTA_FLASHING_H__ */